#pragma once
#include "fxcc/core/graph/opengl3/Effect3d.h"
#include "fxcc/core/graph/opengl3/Texture2DJack.h"


namespace fxcc
{
    namespace graph
    {
        namespace opengl3
        {
            namespace ssao
            {
                struct FXCC_API  Effect : public fxcc::graph::opengl3::Effect3d
                {
                       struct FXCC_API  SSAOKernel
                    {
                        glm::vec3 value[64];
                    };

                    Effect();
                    void Begin();
                    void SetProjection(const glm::mat4& proj);
                    void SetViewFragPosMap(const fxcc::graph::opengl3::Texture2DJack *texture);
                    void SetViewNormalMap(const fxcc::graph::opengl3::Texture2DJack *texture);
                    void SetNoiseTexture(const fxcc::graph::opengl3::Texture2DJack *texture);

                    void SetKernel(const SSAOKernel &kernel);
                    std::string FragCode();
                };
            };
        };
    };
};